package cxf.spring.demo.example;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * Метод invokeLater() и работа с потоком рассылки событий
 * <p/>
 * User: Vlad Vinichenko (akerigan@gmail.com)
 * Date: 07.03.2009
 * Time: 12:31:25
 */
public class InvokeLater extends JFrame {

    private JButton button;

    // поток, выполняющий "сложную работу" class
    class ComplexJobThread extends Thread {
        public void run() {
            try {
                // изобразим задержку
                sleep(3000);
                // работа закончена, нужно изменить интерфейс
                EventQueue.invokeLater(new Runnable() {
                    public void run() {
                        button.setText("Работа завершена");
                    }
                });
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    public InvokeLater() {
        super("InvokeLater"); // при закрытии окна - выход
        setDefaultCloseOperation(EXIT_ON_CLOSE); // добавим кнопку со слушателем
        button = new JButton("Выполнить сложную работу");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // запустим отдельный поток
                new ComplexJobThread().start();
                button.setText("Подождите...");
            }
        });
        // настроим панель содержимого и выведем окно на экран
        getContentPane().setLayout(new FlowLayout());
        getContentPane().add(new JTextField(20));
        getContentPane().add(button);
        setSize(300, 200);
        setVisible(true);
    }

    public static void main(String[] args) {
        new InvokeLater();
    }


}
